package com.kang.service;

import java.util.List;

import com.kang.pojo.InventoryLiquidation;
import com.kang.pojo.InventoryLiquidationStatistics;
import com.kang.pojo.InventoryLiquidation_itemInformation;
import com.kang.pojo.ItemDetail;
import com.vonechina.entity.page.ItemLossPage;
import com.vonechina.entity.page.LiquidationListPage;
import com.vonechina.entity.page.LiquidationStatisticsListPage;

/**
 * 库存盘点--服务层接口
 * @author wd
 *
 */
public interface InventoryLiquidationService {
	/**
	 * 查询盘点列表总条数
	 * @param liquidationListPage	查询条件（封装的分页实体类）
	 * @return	查询的总记录数
	 */
	public int selectByWhereCount(LiquidationListPage liquidationListPage);
	
	/**
	 * 查询盘点列表
	 * @param liquidationListPage	查询条件（封装的分页实体类）
	 * @return	盘点集合
	 */
	public List<InventoryLiquidation> selectByWhereList(LiquidationListPage liquidationListPage);
	
	/**
	 * 根据库存盘点id删除库存盘点
	 * @param inventoryID	盘点ID
	 * @return	true与false
	 */
	public boolean deleteInventoryLiquidationById(int inventoryID);
	
	/**
	 * 根据盘点id查询盘点信息
	 * @param inventoryID	盘点ID
	 * @return	盘点信息（实体类）
	 */
	public InventoryLiquidation getInventoryLiquidationById(Integer inventoryID);
	
	/**
	 * 根据盘点id查询盘点详情物品列表
	 * @param inventoryID	盘点ID
	 * @return	盘点物品集合List<InventoryLiquidation_itemInformation>
	 */
	public List<InventoryLiquidation_itemInformation> listItemByInventoryID(Integer inventoryID);
	
	/**
	 * 添加盘点物品时查询物品列表
	 * @param page	查询条件
	 * @return	批次集合
	 */
	public List<ItemDetail> listItemDetailForLoss(ItemLossPage page);
	
	/**
	 * 修改盘点单信息
	 * @param inventoryLiquidation	库存盘点（实体类）
	 * @return	int型（大于0成功否则失败）
	 */
	public int updateInventoryLiquidation(InventoryLiquidation inventoryLiquidation);
	
	/**
	 * 删除盘点单的中不属于当前集合的物品id的物品
	 * @param inventoryID	盘点ID
	 * @param itemIds	批次ID数组集合
	 * @return	int型（大于0成功否则失败）
	 */
	public int deleteItemNotInLiquidationSingle(Integer inventoryID,Integer[] itemIds);
	
	/**
	 * 保存盘点单中的物品
	 * @param inventoryID	盘点D
	 * @param itemIds	批次ID数组集合
	 * @param number	物品盘点前数量集合
	 * @param itemInformationIDs	物品ID集合
	 * @param recordNumberS	实际盘点数量数组集合
	 * @param warehouseID	仓库ID
	 * @return	int型（大于0成功否则失败）
	 */
	public int saveLiquidationItemList(Integer inventoryID, Integer[] itemIds,
			Integer[] number, Integer[] itemInformationIDs,Integer[] recordNumberS, Integer warehouseID);
	
	/**
	 * 提交盘点单
	 * @param userID	提交人ID
	 * @param inventoryID	库存盘点ID
	 * @return	int型（大于0成功否则失败）
	 */
	public int saveAndSubmitinventoryLiquidation(Integer userID,Integer inventoryID);
	
	/**
	 * 盘点提交后修改实际库存数量
	 * @param itemIds	批次ID数组集合
	 * @param number	物品数量数组集合
	 * @return	int型（大于0成功否则失败）
	 */
	public int submitUpdateLiquidationAfterNumberForStock(Integer[] itemIds,Integer[] number);
	
	/**
	 * 生成盘点单号
	 * @return	最新的盘点单号
	 */
	public String selectMaxLiquidationNumber();
	
	/**
	 * 新增盘点单信息
	 * @param inventoryLiquidation	库存盘点（实体类）
	 * @return	int型（大于0成功否则失败）
	 */
	public int addNewInventoryLiquidation(InventoryLiquidation inventoryLiquidation);
	
	/**
	 * 根据盘点单号查询盘点id
	 * @param inventoryNumber	盘点编号
	 * @return	盘点id
	 */
	public Integer getIdByInventoryNumber(String inventoryNumber);
	
	/**
	 * 盘点统计
	 * @param liquidationStatisticsListPage	查询条件（封装的分页实体类）
	 * @return	盘点集合
	 */
	public List<InventoryLiquidationStatistics> selectInventoryLiquidationStatisticsList(LiquidationStatisticsListPage liquidationStatisticsListPage);
	
	
	
	
}
